האתר שלך מאפשר לגולש הורדה של קבצים, אבל אתה אישית תמיד מתעצבן כשצריך להוריד 50 קבצים נפרדים אחד אחד במקום ארכיון עם כל הקבצים בבת אחת?
ב PHP יש מחלקה מובנת לעבודה עם zip
// Creating object of the ZipArchive
$zip = new ZipArchive();
$zip = new ZipArchive();
רצוי לתת לכל קובץ zip שם רנדומלי או לקוות לטוב אם באתר יגלשו שני אנשים במקביל.
$zip = new ZipArchive();
if($zip->open("someName.zip",ZIPARCHIVE::CREATE)===TRUE)
{
// הוספת קובץ לתוך הזיפ
$zip->addFile("master.css");
$zip->addFile("style.css", "new_style.css");
// זה אומר שהקובץ
// style.css
// יופיע בתוך הארכיון תחת השם
// new_style.css
$zip->close();
// סגירת הזיפ
// הקוד למעלה יוצר ארכיון בשם
// someName.zip
// שמכיל את הקבצים
// master.css, new_style.css
}
if($zip->open("someName.zip",ZIPARCHIVE::CREATE)===TRUE)
{
// הוספת קובץ לתוך הזיפ
$zip->addFile("master.css");
$zip->addFile("style.css", "new_style.css");
// זה אומר שהקובץ
// style.css
// יופיע בתוך הארכיון תחת השם
// new_style.css
$zip->close();
// סגירת הזיפ
// הקוד למעלה יוצר ארכיון בשם
// someName.zip
// שמכיל את הקבצים
// master.css, new_style.css
}
להציע לגולש את הקובץ להורדה אפשר באמצעות הסקריפט של קובץ להרודה.
שימו לב לשורה 5 שבה אפשר לשנות את שם הקובץ הנשלח ולהחליט שהדפדפן יציע לגולש לשמור את הקובץ בשם PHPGUIDE.ZIP במקום someName.zip או השם הרנדומלי שיצא.
אפשר גם לקרוא קבצי zip
$zip = new ZipArchive();
// פתיחת קובץ הזיפ
if ($zip->open("master.zip") === TRUE)
{
$zip->extractTo("/path/to/folder/");
// מוציא את כל הקבצים מהארכיון לתיקיה הרשומה
$zip->close();
}
// פתיחת קובץ הזיפ
if ($zip->open("master.zip") === TRUE)
{
$zip->extractTo("/path/to/folder/");
// מוציא את כל הקבצים מהארכיון לתיקיה הרשומה
$zip->close();
}
אפשר לבחור קבצים מסוימים להוצאה
/
if ($zip->open("master.zip") === TRUE)
{
// מערך עם שמות הקבצים שיש להוציא מהארכיון
// ארכיון יכול להכיל בין היתר גם תיקיות
$files = array("fonts.css","styles/home/master.css");
$zip->extractTo("/path/to/folder/",$files);
$zip->close();
}
if ($zip->open("master.zip") === TRUE)
{
// מערך עם שמות הקבצים שיש להוציא מהארכיון
// ארכיון יכול להכיל בין היתר גם תיקיות
$files = array("fonts.css","styles/home/master.css");
$zip->extractTo("/path/to/folder/",$files);
$zip->close();
}
למשל השירות שהופך עיצובים מאנגלית לעברית מאפשר העלאה של קובץ zip שנפתח בשרת בצורה הזו, הקבצים עוברים את התהליך ומקובצים חזרה לקובץ zip שחוזר לגולש.
תשתמש בזה כשאתה רוצה לתת לגולשים להוריד כמה קבצים במכה או במקומות עם העלאת קבצים, כדי לאפשר לגולש להעלות את כל הקבצים בבת אחת.
תגובות לכתבה:
תודה, מדריך שימושי ביותר :)
תודה.
זה אפשרי לעעביר תקיה שלמה לתוך ה zip?
@רז, אין כזו.
בדוקומנטציה יש לזה פתרון (כמו לכל דבר) כזה:
http://il.php.net/manual/en/function.ziparchive-addfile.php#93090
אפשר לשלב בשם את הip של המשתמש (ושהוא מוריד להשתמש בשם קבוע) וככה למנוע התנגשות.
אפשר. בדרך כלל אני משתמש בפתרון האולטימתיבי: microtime
כאשר ZIPARCHIVE אינו מותקן אפשר לבצע פעולת Exec
FOR EXAMPLE:
zip file.zip file1 file2 file3
כאשר ziparchive לא מותקן אבל אפשר לבצע EXEC - עדיף להתקין zip_archive, לא? :)
הרצתי ב PHP לולאה שקוראת את כל התיקיה ומריצה על זה על פונקציה של הוספת קובץ
כשאני מוריד את התיקיה זה באמת מוריד אבל שאני מלחץ זה רושם שגיאה
The archive is either in unknown format or damaged
למרות שכשאני ניכנס לקובץ RAR אני רואה את כל הקבצים בצורה טובה
למה יש בעיה בחילוץ?